package solution;

/**
 * <a href="https://www.nowcoder.com/practice/e08819cfdeb34985a8de9c4e6562e724?tpId=202&&tqId=38710&rp=1&ru=/activity/oj&qru=/ta/code-written-high/question-ranking">
 * NC42 有重复项数字的所有排列</a>
 *
 * @author or2
 * @Description 求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。
 * @create 2021年09月12日 时间: 7:49
 */
public class WC1 {

    public static class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    }

    /**
     * @param root TreeNode类
     * @return int整型
     */
    public int run(TreeNode root) {
        return dfs(root);
    }

    private int dfs(TreeNode root) {
        if (root == null) {
            return 0;
        }
        if (root.left != null && root.right != null) {
            return Math.min(dfs(root.left), dfs(root.right)) + 1;
        } else if (root.left != null) {
            return dfs(root.left) + 1;
        } else if (root.right != null) {
            return dfs(root.right) + 1;
        } else {
            return 1;
        }
    }
}
